#ifndef COMMON_DEFS_H
#define COMMON_DEFS_H

#include <cstdint>

// ###########################################################################
// 通用宏定义
// ###########################################################################
// 错误码格式：高8位=错误类型，低24位=具体错误号
#define ERROR_TYPE_MASK    0xFF000000
#define ERROR_CODE_MASK    0x00FFFFFF

// 错误类型（高8位）
#define ERROR_TYPE_AUTH    0x01000000 // 认证错误
#define ERROR_TYPE_CMD     0x02000000 // 命令错误
#define ERROR_TYPE_COMM    0x03000000 // 通信错误
#define ERROR_TYPE_HW      0x04000000 // 硬件错误
#define ERROR_TYPE_SEC     0x05000000 // 安全错误

// 具体错误码（低24位）
#define ERROR_AUTH_NO_USER     (ERROR_TYPE_AUTH | 0x000001) // 无效用户
#define ERROR_AUTH_PWD_ERR     (ERROR_TYPE_AUTH | 0x000002) // 密码错误
#define ERROR_AUTH_LOCKED      (ERROR_TYPE_AUTH | 0x000003) // 用户锁定
#define ERROR_CMD_NO_PERM      (ERROR_TYPE_CMD | 0x000001)  // 权限不足
#define ERROR_CMD_PARAM_ERR    (ERROR_TYPE_CMD | 0x000002)  // 参数错误
#define ERROR_COMM_CRC_ERR     (ERROR_TYPE_COMM | 0x000001)  // CRC校验失败
#define ERROR_COMM_FRAME_ERR   (ERROR_TYPE_COMM | 0x000002)  // 帧格式错误
#define ERROR_HW_MOTOR_ERR     (ERROR_TYPE_HW | 0x000001)    // 电机故障
#define ERROR_SEC_OUT_OF_WS    (ERROR_TYPE_SEC | 0x000001)  // 超出工作空间

// ###########################################################################
// 通用枚举
// ###########################################################################
// 运行状态枚举（对应RobotState::running_state）
enum class RunState : uint8_t {
    IDLE = 0,       // 待机
    MOVING = 1,     // 运动中
    FAULT = 2,      // 故障
    EMERGENCY_STOP = 3, // 急停
    TRAJECTORY_RUNNING = 4 // 轨迹执行中
};

// 电机状态枚举（对应RobotState::motor_states）
enum class MotorState : uint8_t {
    DISABLED = 0,  // 禁用
    ENABLED = 1,    // 使能
    FAULT = 2,      // 故障
    RUNNING = 3     // 运行中
};

// 日志级别枚举
enum class LogLevel : uint8_t {
    DEBUG = 0x01,   // 调试
    INFO = 0x02,    // 信息
    WARNING = 0x03, // 警告
    ERROR = 0x04,   // 错误
    FATAL = 0x05    // 致命错误
};

// 客户端类型枚举（认证请求中的客户端类型）
enum class ClientType : uint8_t {
    PC_CLIENT = 0x01,    // PC客户端
    MOBILE_CLIENT = 0x02,// 移动客户端
    THIRD_PARTY = 0x03   // 第三方系统
};

#endif // COMMON_DEFS_H